home *** CD-ROM | disk | FTP | other *** search
/ Multimedia Cube 1 & 2 / Multimedia Cube - Disc 2.iso / spfrench / disk1 / wfsound.ms_ / wfsound.bin
Text File  |  1994-04-01  |  19KB  |  775 lines

  1. '**************************************************************************
  2. '*                     Wired for Sound Install Script
  3. '*     version 1.1   by Aaron Wallace  (c) 1993 Aristosoft, Inc
  4. '**************************************************************************
  5.  
  6. '' Define DEBUG for script debugging
  7.  
  8. '$INCLUDE 'setupapi.inc'
  9. '$INCLUDE 'msdetect.inc'
  10.  
  11. ''Dialog ID's
  12. CONST WELCOME      = 100
  13. CONST ASKQUIT      = 200
  14. CONST DESTPATH     = 300
  15. CONST EXITFAILURE  = 400
  16. CONST EXITQUIT     = 600
  17. CONST EXITSUCCESS  = 700
  18. CONST WHICHINST    = 800
  19. CONST APPHELP      = 900
  20. CONST WHICHINSTHLP = 910
  21. CONST SETOWNER       = 1000
  22. CONST TESTSOUND    = 1100
  23. CONST INSTALLDRV   = 1200
  24. CONST SOUNDPLAYED  = 1300
  25. CONST WAITDLG       = 1400
  26. CONST EXITREBOOT   = 1500
  27. CONST BBD1       = 5000
  28. CONST BBD2       = 5010
  29. CONST BBD3       = 5020
  30. CONST BBD4       = 5030
  31. CONST BBD5       = 5040
  32. CONST BBD6       = 5050
  33. CONST SOUNDSDLG    = 5200
  34. CONST TAPPSDLG     = 5300
  35. CONST VOICESDLG    = 5400
  36. CONST CUSTINST     = 6200
  37. CONST TOOBIG       = 6300
  38. CONST BADPATH      = 6400
  39.  
  40. '' For message boxes
  41. CONST MB_YESNO=4
  42. CONST IDNO=7
  43. CONST IDYES=6
  44.  
  45. ''Bitmap ID
  46. CONST LOGO         = 1
  47.  
  48. ''File Types
  49. CONST BASEFILES     = 1
  50. CONST TAPPFILES     = 2
  51. CONST SOUNDFILES    = 3
  52. CONST VOICEFILES    = 4
  53. CONST MAX_TYPES     = 4
  54.  
  55. ''Install directories, etc.
  56. GLOBAL DEST$        ''Default destination directory.
  57. GLOBAL WINDRIVE$    ''Windows drive letter.
  58. GLOBAL CUIDLL$        ''CUI DLL
  59. GLOBAL WINDIR$        ''Windows directory
  60. GLOBAL SYSDIR$        ''System directory
  61. GLOBAL WININI$        ''"win.ini"
  62. GLOBAL SYSINI$        ''GetWindowsDir() + "system.ini"
  63.  
  64. '' User info
  65. GLOBAL OWNER$        '' Product registered owner
  66. GLOBAL WORKPLACE$   '' Company or such
  67.  
  68. ''Install item lists
  69. GLOBAL BASE$        ''List of base files
  70. GLOBAL TAPPS$       ''List of all talking apps
  71. GLOBAL SOUNDS$      ''List of all sounds.
  72. GLOBAL VOICES$      ''List of available voices
  73.  
  74. GLOBAL BASEINST$    ''List of base files to install
  75. GLOBAL TAPPSINST$   ''List of Talking Apps to install
  76. GLOBAL SOUNDSINST$  ''List of sounds to install
  77. GLOBAL VOICESINST$  ''List of voices to install
  78.  
  79. ''Custom Install list symbol names
  80. GLOBAL BASENEEDS$   ''Option list costs per drive
  81. GLOBAL TAPPNEEDS$
  82. GLOBAL SOUNDNEEDS$
  83. GLOBAL VOICENEEDS$
  84. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  85.  
  86. ''Custom Install dialog list symbol names
  87. GLOBAL CHECKSTATES$ ''List of check box values
  88. GLOBAL STATUSTEXT$  ''List of values to initialize status items
  89. GLOBAL DRIVETEXT$   ''Drive space info, etc.
  90.  
  91. '' Install DSOUND
  92. GLOBAL INSTDSOUND%
  93.  
  94. '' Customize product
  95. GLOBAL CUSTOMIZE%
  96.  
  97. '' Test sound hardware
  98. GLOBAL DOTEST%
  99.  
  100. GLOBAL WFSFOUND%
  101. GLOBAL CUSTINSTALL%
  102.  
  103. '' Which type of install to perform, by default
  104. GLOBAL DEFINSTOPT$
  105.  
  106. ''Progman titles
  107. GLOBAL WFSAPP$        ''Name of WFS app
  108.  
  109. ''Win.ini [Aristosoft] install code
  110. GLOBAL INSTDIR$
  111.  
  112. ''Space requirements
  113. GLOBAL FITS%        '' > 0 if everything fits
  114.  
  115. DECLARE SUB RecalcOptFiles (ftype%)
  116. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  117. DECLARE FUNCTION GetWindowsVersionCorrectly& ()
  118. DECLARE FUNCTION MakeVer& (x as integer, y as integer)
  119. DECLARE FUNCTION StringInList (s$, y$) AS INTEGER
  120. DECLARE FUNCTION sndPlaySound LIB "MMSYSTEM.DLL" (f$, fl%) AS INTEGER
  121. DECLARE SUB RemoveSectionFiles (dest$, sect$)
  122. DECLARE SUB RemDirectory (d$)
  123. DECLARE FUNCTION HasSoundDriver() AS INTEGER
  124. DECLARE SUB SendProgmanCommand LIB "CUI.DLL" (s$)
  125.  
  126. '' These are defined in wfs.inc (product-specific)
  127. DECLARE SUB SetProductTitles
  128. DECLARE FUNCTION InfFile() AS STRING
  129. DECLARE FUNCTION MakeInstDir(D$) AS STRING
  130. DECLARE SUB AddInfSectionNames (BASE$, TAPPS$, SOUNDS$, VOICES$, BASEINST$, TAPPSINST$, SOUNDSINST$, VOICESINST$)
  131. DECLARE SUB RecalcPath
  132. DECLARE SUB AddOptFilesToCopyList (ftype%)
  133. DECLARE SUB SetDriveStatus
  134. DECLARE SUB AddOptFiles
  135. DECLARE SUB ConfigureApps
  136. DECLARE SUB AddBillboards
  137. DECLARE SUB DoUninstall
  138.  
  139.  
  140. '' This is where it all begins!
  141.  
  142. INIT:
  143.  
  144.     CUIDLL$ = "cui.dll"
  145.     DEFINSTOPT$ = "1"
  146.     INSTDSOUND% = 0
  147.     CUSTOMIZE% = -1
  148.     DOTEST% = -1
  149.  
  150.     SetProductTitles
  151.  
  152.     HELPPROC$ = "FHelpDlgProc"        ''Help dialog procedure
  153.  
  154.     SetBitmap CUIDLL$, LOGO
  155.  
  156.  
  157. '' We don't do Windows 3.0...
  158.  
  159.     If GetWindowsVersionCorrectly() < MakeVer(3, 10) Then
  160.     i% = DoMsgBox("Wired for Sound ne marche pas avec Windows 3.0.", WFSAPP$, MB_OK)
  161.     GOTO DONEFINIFIN
  162.     End If
  163.  
  164. ''Find location of INF file and create a default dest. dir
  165.  
  166.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  167.     IF szInf$ = "" THEN
  168.     szInf$ = GetSymbolValue("STF_CWDDIR") + InfFile()
  169.     END IF
  170.  
  171.     '' Load the INF file
  172.     ReadInfFile szInf$
  173.  
  174.     '' Construct default strings
  175.     WINDIR$ = GetWindowsDir()
  176.     SYSDIR$ = GetWindowsSysDir()
  177.     WININI$ = "win.ini"
  178.     SYSINI$ = MakePath(WINDIR$, "system.ini")
  179.  
  180.     '' Construct the default install path
  181.     WINDRIVE$ = MID$(WINDIR$, 1, 1)
  182.     DEST$ = MakeInstDir(WINDRIVE$)
  183.  
  184.     '' Setup install symbols
  185.     BASE$ = "Base Files"
  186.     TAPPS$ = "Talking Apps"
  187.     SOUNDS$ = "Sounds"
  188.     VOICES$ = "Voices"
  189.     BASEINST$ = "Base Files Inst"
  190.     TAPPSINST$ = "Talking Apps Inst"
  191.     SOUNDSINST$ = "Sounds Inst"
  192.     VOICESINST$ = "Voices Inst"
  193.  
  194.     SetSymbolValue BASE$, ""
  195.     SetSymbolValue TAPPS$, ""
  196.     SetSymbolValue SOUNDS$, ""
  197.     SetSymbolValue VOICES$, ""
  198.  
  199.     ''Set up symbols for the initial install dialog
  200.     RADIODEFAULT$ = "Radio Default"
  201.  
  202.     ''Set up symbols for the custom install dialog
  203.     CHECKSTATES$ = "CheckItemsState"
  204.     STATUSTEXT$  = "StatusItemsText"
  205.     DRIVETEXT$   = "DriveStatusText"
  206.     FOR i% = 1 TO 4 STEP 1
  207.     AddListItem CHECKSTATES$, "ON"
  208.     NEXT i%
  209.     FOR i% = 1 TO 4 STEP 1
  210.     AddListItem STATUSTEXT$, ""
  211.     NEXT i%
  212.     FOR i% = 1 TO 7 STEP 1
  213.     AddListItem DRIVETEXT$, ""
  214.     NEXT i%
  215.     ReplaceListItem DRIVETEXT$, 7, DEST$
  216.  
  217.     ''Disk cost list symbols
  218.     BASENEEDS$   = "BaseNeeds"
  219.     TAPPNEEDS$   = "TAppNeeds"
  220.     SOUNDNEEDS$  = "SoundNeeds"
  221.     VOICENEEDS$  = "VoiceNeeds"
  222.     EXTRACOSTS$  = "ExtraCosts"
  223.     FOR i% = 1 TO 26 STEP 1
  224.     AddListItem EXTRACOSTS$, "0"
  225.     NEXT i%
  226.  
  227.     ''Configure lists of installable files
  228.     AddInfSectionNames BASE$, TAPPS$, SOUNDS$, VOICES$, BASEINST$, TAPPSINST$, SOUNDSINST$, VOICESINST$
  229.  
  230. '$IFDEF DEBUG
  231.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  232. '$ENDIF ''DEBUG
  233.  
  234.  
  235. '' Display Welcome dialog
  236. WELCOME:
  237.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  238.     
  239.     IF sz$ = "EXIT" THEN
  240.     GOSUB ASKQUIT
  241.     GOTO WELCOME
  242.     ELSEIF sz$ = "CONTINUE" THEN
  243.     UIPop 1
  244.     GOTO WHICHINST
  245.     END IF
  246.     GOTO WELCOME
  247.  
  248.  
  249. '' See if users want an easy install, custom install, or no install...
  250. WHICHINST:
  251.     SetSymbolValue "RadioDefault", DEFINSTOPT$
  252.     sz$ = UIStartDlg(CUIDLL$, WHICHINST, "FRadioDlgProc", WHICHINSTHLP, HELPPROC$)
  253.     
  254.     ''sz$ is the button the user pressed; RADIODEFAULT$ is the option selected
  255.  
  256.     IF sz$ = "EXIT" THEN
  257.     GOSUB ASKQUIT
  258.     GOTO WHICHINST
  259.     ELSEIF sz$ = "CONTINUE" THEN
  260.     sz$ = GetSymbolValue("ButtonChecked")
  261.     IF sz$ = "1" THEN
  262.         UIPop 1
  263.         CUSTINSTALL% = 0
  264.         GOTO CUSTOMIZE
  265.     ELSEIF sz$ = "2" THEN
  266.         UIPop 1
  267.         CUSTINSTALL% = -1
  268.         GOTO CUSTOMIZE
  269.     ELSEIF sz$ = "3" THEN
  270.         DoUninstall
  271.         GOTO WHICHINST
  272.     END IF
  273.     END IF
  274.     GOTO WHICHINST
  275.  
  276.  
  277. '' Customize the copy of the product
  278. CUSTOMIZE:
  279.     IF NOT CUSTOMIZE% THEN
  280.     GOTO SOUNDTEST
  281.     END IF
  282.  
  283.     sz$ = UIStartDlg(CUIDLL$, SETOWNER, "FNameOrgDlgProc", WHICHINSTHLP, HELPPROC$)
  284.  
  285.     IF sz$ = "EXIT" THEN
  286.     GOSUB ASKQUIT
  287.     GOTO CUSTOMIZE
  288.     ELSEIF sz$ = "CONTINUE" THEN
  289.     OWNER$ = GetSymbolValue("NameOut")
  290.     WORKPLACE$ = GetSymbolValue("OrgOut")
  291.     UIPop 1
  292.     GOTO SOUNDTEST
  293.     ELSEIF sz$ = "BACK" THEN
  294.     UIPop 1
  295.     GOTO WHICHINST
  296.     END IF
  297.     GOTO CUSTOMIZE
  298.  
  299.  
  300. '' Test the sound system
  301. SOUNDTEST:
  302.     IF NOT DOTEST% THEN
  303.     GOTO DOINST
  304.     END IF
  305.  
  306.     sz$ = UIStartDlg(CUIDLL$, TESTSOUND, "FInfoDlgProc", WHICHINSTHLP, HELPPROC$)
  307.  
  308.     IF sz$ = "EXIT" THEN
  309.     GOSUB ASKQUIT
  310.     GOTO SOUNDTEST
  311.     ELSEIF sz$ = "CONTINUE" THEN
  312.     UIPop 1
  313.     IF HasSoundDriver() THEN
  314.         GOTO DOINST
  315.     ELSE
  316.         GOTO INSTDSOUND
  317.     END IF
  318.     ELSEIF sz$ = "BACK" THEN
  319.     UIPop 1
  320.     GOTO CUSTOMIZE
  321.     ELSEIF sz$ = "TEST" THEN
  322.     w$ = "TEST.WAV"
  323.     res% = sndPlaySound(w$, 2)
  324.     UIPop 1
  325.     GOTO DIDPLAY
  326.     END IF
  327.     GOTO SOUNDTEST
  328.  
  329.  
  330. '' Did the sound play?
  331. DIDPLAY:
  332.     sz$ = UIStartDlg(CUIDLL$, SOUNDPLAYED, "FInfoDlgProc", WHICHINSTHLP, HELPPROC$)
  333.  
  334.     IF sz$ = "EXIT" THEN
  335.     GOSUB ASKQUIT
  336.     GOTO DIDPLAY
  337.     ELSEIF sz$ = "YES" THEN
  338.     UIPop 1
  339.     GOTO DOINST
  340.     ELSEIF sz$ = "NO" THEN
  341.     UIPop 1
  342.     GOTO INSTDSOUND
  343.     ELSEIF sz$ = "BACK" THEN
  344.     UIPop 1
  345.     GOTO SOUNDTEST
  346.     END IF
  347.     GOTO DIDPLAY
  348.  
  349.  
  350. '' Install DSOUND
  351. INSTDSOUND:
  352.     sz$ = UIStartDlg(CUIDLL$, INSTALLDRV, "FInfoDlgProc", WHICHINSTHLP, HELPPROC$)
  353.  
  354.     IF sz$ = "EXIT" THEN
  355.     GOSUB ASKQUIT
  356.     GOTO INSTDSOUND
  357.     ELSEIF sz$ = "INSTALL" THEN
  358.     UIPop 1
  359.     INSTDSOUND% = -1
  360.     GOTO DOINST
  361.     ELSEIF sz$ = "CONTINUE" THEN
  362.     UIPop 1
  363.     GOTO DOINST
  364.     ELSEIF sz$ = "BACK" THEN
  365.     UIPop 1
  366.     GOTO DIDPLAY
  367.     END IF
  368.     GOTO INSTDSOUND
  369.  
  370.  
  371. '' Do the appropriate type of install
  372. DOINST:
  373.     IF CUSTINSTALL% THEN
  374.     GOTO CUSTINST
  375.     END IF
  376.     '' else fall-thru
  377.  
  378. ''Perform a default installation (of all files and options)
  379. DEFINST:
  380.     RecalcPath
  381.     SetDriveStatus
  382.  
  383. GETDEFINSTPATH:
  384.     GOSUB GETPATH
  385.  
  386.     IF sz$ = "CONTINUE" THEN
  387.     ''Install only if it will fit.
  388.     IF FITS% > 0 THEN
  389.         GOSUB TOOBIG
  390.         GOTO GETDEFINSTPATH
  391.     END IF
  392.     UIPop 1
  393.     GOTO INSTALL
  394.     ELSEIF sz$ = "BACK" THEN
  395.     GOTO WHICHINST
  396.     END IF
  397.     GOTO GETDEFINSTPATH
  398.  
  399.  
  400. ''Perform a custom installation (let user choose files, etc)
  401. CUSTINST:
  402.     RecalcPath
  403.     SetDriveStatus
  404.  
  405. CUSTINSTDLG:
  406.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  407.  
  408.     IF sz$ = "CONTINUE" THEN
  409.     ''Install only if it will fit.
  410.     IF FITS% > 0 THEN
  411.         GOSUB TOOBIG
  412.         GOTO CUSTINSTDLG
  413.     END IF
  414.     UIPop 1
  415.     GOTO INSTALL
  416.     ELSEIF sz$ = "PATH" THEN
  417.     GOSUB GETPATH
  418.     GOTO CUSTINSTDLG
  419.     ELSEIF sz$ = "CHK1" THEN
  420.     RecalcOptFiles BASEFILES
  421.     SetDriveStatus
  422.     GOTO CUSTINSTDLG
  423.     ELSEIF sz$ = "CHK2" THEN
  424.     RecalcOptFiles TAPPFILES
  425.     SetDriveStatus
  426.     GOTO CUSTINSTDLG
  427.     ELSEIF sz$ = "CHK3" THEN
  428.     RecalcOptFiles SOUNDFILES
  429.     SetDriveStatus
  430.     GOTO CUSTINSTDLG
  431.     ELSEIF sz$ = "CHK4" THEN
  432.     RecalcOptFiles VOICEFILES
  433.     SetDriveStatus
  434.     GOTO CUSTINSTDLG
  435.     ELSEIF sz$ = "BTN2" THEN
  436.     GOTO TAPPFILES
  437.     ELSEIF sz$ = "BTN3" THEN
  438.     GOTO SOUNDFILES
  439.     ELSEIF sz$ = "BTN4" THEN
  440.     GOTO VOICEFILES
  441.     ELSEIF sz$ = "EXIT" THEN
  442.     GOSUB ASKQUIT
  443.     GOTO CUSTINST
  444.     END IF
  445.     GOTO CUSTINSTDLG
  446.  
  447.  
  448. INSTALL:
  449.     SetRestartDir DEST$
  450.     ClearCopyList
  451.  
  452.     AddOptFiles
  453.  
  454.     AddBillboards
  455.  
  456.     CreateDir DEST$, cmoNone
  457.  
  458.     UIPopAll
  459.  
  460.     ''Do the copyn'
  461.     SetCopyGaugePosition 10, 135
  462.     CopyFilesInCopyList
  463.  
  464.     ''Back up SYSTEM.INI and WIN.INI
  465.     CopyFile MakePath(WINDIR$, WININI$), MakePath(WINDIR$, "WIN.BAK"), cmoOverwrite, 0
  466.     CopyFile SYSINI$, MakePath(WINDIR$, "SYSTEM.BAK"), cmoOverwrite, 0
  467.  
  468.     '' Configure the installed applications
  469.     ConfigureApps
  470.  
  471.     ''See if we need to restart Windows to finish installing system files which may be in use
  472.     IF RestartListEmpty() = 0 THEN
  473.     i% = DoMsgBox("Quelques fichiers du systΦme sont dΘjα chargΘes." + "  Fermez tous des applications et pressez OK.  Setup quittera et recommenτera Windows.", "Installation de " + WFSAPP$, MB_OK)
  474.     i% = ExitExecRestart()
  475.     END IF
  476.  
  477. QUIT:
  478.     ON ERROR GOTO ERRQUIT
  479.  
  480.     IF ERR = 0 THEN
  481.     dlg% = EXITREBOOT
  482.     ELSEIF ERR = STFQUIT THEN
  483.     dlg% = EXITQUIT
  484.     ELSE
  485.  
  486. '$IFNDEF DEBUG
  487.     RESUME NEXT
  488. '$ELSE
  489.     dlg% = EXITFAILURE
  490. '$ENDIF
  491.  
  492.     END IF
  493. QUITL1:
  494.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  495.     IF sz$ = "REACTIVATE" THEN
  496.     GOTO QUITL1
  497.     END IF
  498.     UIPop 1
  499.  
  500. DONEFINIFIN:
  501.     END
  502.  
  503. ERRQUIT:
  504.     i% = DoMsgBox("Il y a un erreur dans les fichiers de l'installation.", "Erreur de l'Installation", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  505.     END
  506.  
  507.  
  508.  
  509. GETPATH:
  510.     SetSymbolValue "EditTextIn", DEST$
  511.     SetSymbolValue "EditFocus", "END"
  512. GETPATHL1:
  513.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  514.  
  515.     IF sz$ = "CONTINUE" THEN
  516.     olddest$ = DEST$
  517.     DEST$ = GetSymbolValue("EditTextOut")
  518.  
  519.     ''Validate new path.
  520.     IF IsDirWritable(DEST$) = 0 THEN
  521.         GOSUB BADPATH
  522.         GOTO GETPATHL1
  523.     END IF
  524.     UIPop 1
  525.  
  526.     ''Truncate display if too long.
  527.     IF LEN(DEST$) > 23 THEN
  528.         ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  529.     ELSE
  530.         ReplaceListItem DRIVETEXT$, 7, DEST$
  531.     END IF
  532.  
  533.     ''Recalc if path changed.
  534.     IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  535.         RecalcPath
  536.         SetDriveStatus
  537.     END IF
  538.  
  539.     olddest$ = ""
  540.     RETURN
  541.     ELSEIF sz$ = "EXIT" THEN
  542.     GOSUB ASKQUIT
  543.     GOTO GETPATHL1
  544.     ELSEIF sz$ = "BACK" THEN
  545.     UIPop 1
  546.     RETURN
  547.     END IF
  548.     GOTO GETPATHL1
  549.  
  550.  
  551. TAPPFILES:
  552.     SetSymbolValue "ListItemsIn", GetSymbolValue(TAPPS$)
  553.     SetSymbolValue "ListItemsOut", GetSymbolValue(TAPPSINST$)
  554. TAPPF:
  555.     sz$ = UIStartDlg(CUIDLL$, TAPPSDLG, "FMultiDlgProc", APPHELP, HELPPROC$)
  556.  
  557.     IF sz$ = "CONTINUE" THEN
  558.     UIPop 1
  559.     SetSymbolValue TAPPSINST$, GetSymbolValue("ListItemsOut")
  560.     RecalcOptFiles TAPPFILES
  561.     SetDriveStatus
  562.     GOTO CUSTINSTDLG
  563.     ELSEIF sz$ = "EXIT" THEN
  564.     GOSUB ASKQUIT
  565.     GOTO TAPPF
  566.     ELSE '' Back...
  567.     UIPop 1
  568.     GOTO CUSTINSTDLG
  569.     END IF
  570.     GOTO TAPPF
  571.  
  572.  
  573. SOUNDFILES:
  574.     SetSymbolValue "ListItemsIn", GetSymbolValue(SOUNDS$)
  575.     SetSymbolValue "ListItemsOut", GetSymbolValue(SOUNDSINST$)
  576. SOUNDF:
  577.     sz$ = UIStartDlg(CUIDLL$, SOUNDSDLG, "FMultiDlgProc", APPHELP, HELPPROC$)
  578.  
  579.     IF sz$ = "CONTINUE" THEN
  580.     UIPop 1
  581.     SetSymbolValue SOUNDSINST$, GetSymbolValue("ListItemsOut")
  582.     RecalcOptFiles SOUNDFILES
  583.     SetDriveStatus
  584.     GOTO CUSTINSTDLG
  585.     ELSEIF sz$ = "EXIT" THEN
  586.     GOSUB ASKQUIT
  587.     GOTO SOUNDF
  588.     ELSE '' Back...
  589.     UIPop 1
  590.     GOTO CUSTINSTDLG
  591.     END IF
  592.     GOTO SOUNDF
  593.  
  594.  
  595. VOICEFILES:
  596.     SetSymbolValue "ListItemsIn", GetSymbolValue(VOICES$)
  597.     SetSymbolValue "ListItemsOut", GetSymbolValue(VOICESINST$)
  598. VOICEF:
  599.     sz$ = UIStartDlg(CUIDLL$, VOICESDLG, "FMultiDlgProc", APPHELP, HELPPROC$)
  600.  
  601.     IF sz$ = "CONTINUE" THEN
  602.     UIPop 1
  603.     SetSymbolValue VOICESINST$, GetSymbolValue("ListItemsOut")
  604.     RecalcOptFiles VOICEFILES
  605.     SetDriveStatus
  606.     GOTO CUSTINSTDLG
  607.     ELSEIF sz$ = "EXIT" THEN
  608.     GOSUB ASKQUIT
  609.     GOTO VOICEF
  610.     ELSE '' Back...
  611.     UIPop 1
  612.     GOTO CUSTINSTDLG
  613.     END IF
  614.     GOTO VOICEF
  615.  
  616.  
  617. TOOBIG:
  618.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  619.     UIPop 1
  620.     RETURN
  621.  
  622.  
  623.  
  624. BADPATH:
  625.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  626.     UIPop 1
  627.     RETURN
  628.  
  629.  
  630. ASKQUIT:
  631.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  632.  
  633.     IF sz$ = "EXIT" THEN
  634.     UIPopAll
  635.     ERROR STFQUIT
  636.     ELSEIF sz$ = "REACTIVATE" THEN
  637.     GOTO ASKQUIT
  638.     ELSE
  639.     UIPop 1
  640.     END IF
  641.     RETURN
  642.  
  643.  
  644. ''Recalculate space based on install options...
  645. SUB RecalcOptFiles (ftype%) STATIC
  646.  
  647.     CursorSave% = ShowWaitCursor()
  648.  
  649.     sz$ = UIStartDlg(CUIDLL$, WAITDLG, "FModelessDlgProc", APPHELP, HELPPROC$)
  650.  
  651.     ClearCopyList
  652.  
  653.     AddOptFilesToCopyList ftype%
  654.  
  655.     fExtra% = 0
  656.     IF ftype% = BASEFILES THEN
  657.     ListSym$ = BASENEEDS$
  658.     IF GetListItem(CHECKSTATES$, BASEFILES) = "ON" THEN
  659.         ''Add extra cost to Windows drive for ini/progman, etc.
  660.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  661.         ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  662.         fExtra% = 1
  663.     END IF
  664.     ELSEIF ftype% = TAPPFILES THEN
  665.     ListSym$ = TAPPNEEDS$
  666.     ELSEIF ftype% = SOUNDFILES THEN
  667.     ListSym$ = SOUNDNEEDS$
  668.     ELSEIF ftype% = VOICEFILES THEN
  669.     ListSym$ = VOICENEEDS$
  670.     END IF
  671.  
  672.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  673.  
  674.     cost& = 0
  675.     FOR i% = 1 TO 26 STEP 1
  676.     cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  677.     NEXT i%
  678.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  679.  
  680.     IF fExtra% THEN
  681.     ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  682.     END IF
  683.  
  684.     UIPop 1
  685.  
  686.     RestoreCursor CursorSave%
  687.  
  688.     ListSym$ = ""
  689. END SUB
  690.  
  691.  
  692. ''Make path from dir and szFile; add \  as needed
  693. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  694.     IF szDir$ = "" THEN
  695.     MakePath = szFile$
  696.     ELSEIF szFile$ = "" THEN
  697.     MakePath = szDir$
  698.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  699.     MakePath = szDir$ + szFile$
  700.     ELSE
  701.     MakePath = szDir$ + "\" + szFile$
  702.     END IF
  703. END FUNCTION
  704.  
  705.  
  706. '' Return true if the given string is in the symbol's list
  707. FUNCTION StringInList (s$, y$) STATIC AS INTEGER
  708.     l% = GetListLength(y$)
  709.     FOR i% = 1 TO l
  710.     IF s$ = GetListItem(y$, i%) THEN
  711.         StringInList = -1
  712.         GOTO DONE
  713.     END IF
  714.     NEXT i%
  715.     StringInList = 0
  716. DONE:
  717. END FUNCTION
  718.  
  719.  
  720. ''Get Windows version in a useful way
  721. FUNCTION GetWindowsVersionCorrectly& () STATIC
  722.     GetWindowsVersionCorrectly = GetWindowsMajorVersion() * 256 + GetWindowsMinorVersion()
  723. END FUNCTION
  724.  
  725.  
  726. '' Turn x, y into a major.minor version long
  727. FUNCTION MakeVer& (x as integer, y as integer) STATIC
  728.     MakeVer = x * 256 + y
  729. END FUNCTION
  730.  
  731.  
  732. '' Remove all files in the given .INF section
  733. SUB RemoveSectionFiles (dest$, sect$) STATIC
  734.     foo$ = "foo"
  735.     MakeListFromSectionFilename foo$, sect$
  736.     l% = GetListLength(foo$)
  737.     FOR i% = 1 TO l% STEP 1
  738.     RemoveFile MakePath(dest$, GetListItem(foo$, i%)), cmoForce
  739.     NEXT i%
  740.     foo$ = ""
  741. END SUB
  742.  
  743.  
  744. '' Remove directory and all files in it, if it exists
  745. SUB RemDirectory(d$) STATIC
  746.     IF Exists(MakePath(d$, "NUL")) THEN
  747.     Kill MakePath(d$, "*.*")
  748.     RmDir d$
  749.     END IF
  750. END SUB
  751.  
  752.  
  753. '' Return True (-1) if the user has a sound driver in the [drivers]
  754. ''  section of win.ini.
  755. FUNCTION HasSoundDriver() STATIC AS INTEGER
  756.     r% = 0
  757.     IF GetIniKeyString(SYSINI$, "drivers", "wave") <> "" THEN
  758.     r% = -1
  759.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave1") <> "" THEN
  760.     r% = -1
  761.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave2") <> "" THEN
  762.     r% = -1
  763.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave3") <> "" THEN
  764.     r% = -1
  765.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave4") <> "" THEN
  766.     r% = -1
  767.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave5") <> "" THEN
  768.     r% = -1
  769.     END IF
  770.     HasSoundDriver = r%
  771. END FUNCTION
  772.  
  773. '' Include product-specific function definitions
  774. '$INCLUDE 'specific.inc'
  775.